package com.lancoo.ccas53.pojo.dto;

import lombok.Data;
import lombok.experimental.Accessors;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName ArrangeTeachingClassDto
 * @Description 排课所需教学班数据
 * @Author quin
 * @Date 2023/3/27 16:57
 */
@Data
@Accessors(chain = true)
public class ArrangeTeachingClassDto implements Serializable {

    /**
     * 教学班id
     */
    private Long teachingClassId;
    /**
     * 教学班名称
     */
    private String teachingClassName;
    /**
     * 教学班类型 0:无需选课 1:在线选课 2:分级教学 3:预选教学班
     */
    private Integer teachingClassType;
    /**
     * 1课程  2环节
     */
    private Integer flag;
    /**
     * 教学班人数
     */
    private Integer studentNumber;
    /**
     * 授课类型 0:环节 1讲授 2实验 3上机 4其他
     */
    private Integer hourType;
    /**
     * 周课时数量
     */
    private Integer weekNum;
    /**
     * 上课周次(二进制)
     */
    private String week;
    /**
     * 教师id(逗号分割)
     */
    private String teacherIds;
    /**
     * 教师名称(逗号分割)
     */
    private String teacherNames;
    /**
     * 课程id
     */
    private Long courseId;
    private Integer courseLimit;
    /**
     * 课程名称
     */
    private String courseName;
    /**
     * 所需教室类型
     */
    private Integer roomType;
    /**
     * 连上节次
     */
    private Integer connectSection;

    /**
     * 连上次数
     */
    private Integer connectNumber;
    /**
     * 指定教室id,多个逗号分割 null表示随机分配
     */
    private Long roomId;
    /**
     * 拆班学生分配 1单数 2双数
     */
    private Integer isSingle;
    /**
     * 分班标识 UUID生成 相同分组的教学班，标识相同，排课时需要分配相同课时的教学班
     */
    private String uniqueShiftSign;
    private String splitClassUuid;
    /**
     * 行政班id
     */
    private String toClass;
    /**
     * 教学班所属校区的id
     */
    private String campusId;
    /**
     * 校区名称
     */
    private String campusName;
    /**
     * 学生id字符串（逗号分隔）
     */
    private String studentIds;
//    /**开课单位id-所属教学计划学院id*/
//    private String collegeId;
//    /**年级id*/
//    private String gradeId;
//    /**专业id*/
//    private String majorId;
    /**
     * 修读性质：1主修2辅修
     */
    private Integer studyNature;

    /**
     * 专业性质，1:公共课，2:专业课
     */
    private Integer majorProp;
    /**
     * 课程性质(环节教学班没有该属性） 1必修  2选修
     **/
    private Integer courseNature;
    /**
     * 课程环节开课单位
     */
    private String courseCollegeId;
    /**
     * 教学班禁排课课时，多个以逗号分隔
     **/
    private String prohibitTimeslotCodes = "";
    //尽量排的课时，主要用于尽量排规则中，处理指定教学班的教室课时分组信息
    //存储规则，0101、0301分别代表周一第1节、周三第1节
    private List<String> fixTimeslotCodes = new ArrayList<>();


    private List<InnerTeachingClass> teachingClassList;
    private String tcId;

    private List<Long> studentIdList;
    private int teacherCourseCount;

    private Long id;
    private Long roomName;


    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }

        if (getClass() != obj.getClass()) {
            return false;
        }

        boolean bRet = false;
        ArrangeTeachingClassDto teachingClass = (ArrangeTeachingClassDto) obj;
        if (this.teachingClassId.equals(teachingClass.getTeachingClassId())
                && this.hourType.equals(teachingClass.getHourType())) {
            bRet = true;
        }

        return bRet;
    }
}
